package com.wjt.homestayms.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wjt.homestayms.common.Result;
import com.wjt.homestayms.mapper.OrderinfoMapper;
import com.wjt.homestayms.pojo.Orderinfo;
import com.wjt.homestayms.common.PageRequest;
import com.wjt.homestayms.common.PageResult;
import com.wjt.homestayms.service.IOrderinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class OrderinfoServiceImpl implements IOrderinfoService {

    @Autowired
    private OrderinfoMapper orderinfoMapper;

    /**
     * 根据用户id，分页查询所有订单信息。
     * @param pageRequest
     * @param id
     * @return
     */
    public PageResult listAll(PageRequest pageRequest, Integer id) {
        PageHelper.startPage(pageRequest.getPageNum(),pageRequest.getPageSize());
        List<Orderinfo> orderinfos = orderinfoMapper.listAll(id);
        return getPageResult(orderinfos);
    }

    public PageResult listAllbyRnum(PageRequest pageRequest, Integer rNum) {
        PageHelper.startPage(pageRequest.getPageNum(),pageRequest.getPageSize());
        List<Orderinfo> orderinfos = orderinfoMapper.listAllbyRnum(rNum);
        return getPageResult(orderinfos);
    }

    public PageResult listAllbyTname(PageRequest pageRequest, String tName) {
        PageHelper.startPage(pageRequest.getPageNum(),pageRequest.getPageSize());
        List<Orderinfo> orderinfos = orderinfoMapper.listAllbyTname(tName);
        return getPageResult(orderinfos);
    }


    /**
     * 根据主键查询
     *
     * @param oId 主键
     * @return 返回记录，没有返回null
     */
    public Result<Orderinfo> getById(Integer oId) {
        return Result.ok( orderinfoMapper.getById(oId));
    }

    /**
     * 新增，插入所有字段
     *
     * @param orderinfo 新增的记录
     * @return 返回影响行数
     */
    public int insert(Orderinfo orderinfo) {
        return orderinfoMapper.insert(orderinfo);
    }

    /**
     * 新增，忽略null字段
     *
     * @param orderinfo 新增的记录
     * @return 返回影响行数
     */
    public int insertIgnoreNull(Orderinfo orderinfo) {
        return orderinfoMapper.insertIgnoreNull(orderinfo);
    }

    /**
     * 修改，修改所有字段
     *
     * @param orderinfo 修改的记录
     * @return 返回影响行数
     */
    public int update(Orderinfo orderinfo) {
        return orderinfoMapper.update(orderinfo);
    }

    /**
     * 修改，忽略null字段
     *
     * @param orderinfo 修改的记录
     * @return 返回影响行数
     */
    public int updateIgnoreNull(Orderinfo orderinfo) {
        return orderinfoMapper.updateIgnoreNull(orderinfo);
    }

    /**
     * 删除记录
     *
     * @param oId 待删除的记录
     * @return 返回影响行数
     */
    public int delete(Integer oId) {
        return orderinfoMapper.delete(oId);
    }

    /**
     * 封装结果
     * @param list
     * @return
     */
    private PageResult getPageResult(List<Orderinfo> list){
        //传入的list长度大于0，表示list中有数据存在。
        if (list.size() > 0) {
            PageInfo<Orderinfo> pageInfo = PageInfo.of(list);
            PageResult page = new PageResult();
            //获取数据记录总数
            page.setTotal(pageInfo.getTotal());
            //获取当前页面页码
            page.setPageNum(pageInfo.getPageNum());
            //获取当前页面数据的个数
            page.setPageSize(pageInfo.getPageSize());
            //获取页面总数
            page.setTotalPage(pageInfo.getPages());
            //封装页面内容
            Iterator<Orderinfo> iterator = pageInfo.getList().iterator();
            List<Object> content = new ArrayList<>();
            while (iterator.hasNext()){
                Orderinfo orderinfo = iterator.next();
                content.add(orderinfo);
            }
            page.setContent(content);
            //封装完成返回PageResult对象
            return page;
        } else {
            return null;
        }
    }

    @Override
    public List<Orderinfo> getOrderinfos(Integer id) {
        List<Orderinfo> orderinfos = orderinfoMapper.listAll(id);
        return orderinfos;
    }
}
